/*	Universidade de Brasília
	Instituto de Ciências Exatas
	Departamento de Ciências da Computação

	Organização de Arquivos - 1/2010 - Turma A - Prof.º Pedro Berger
	Trabalho 2 - Implementação da Árvore B

	00/00000 - Jéfferson Leandro
	09/08860 - Eduardo Pires Fernandes
	09/10945 - João Paulo de Andrade Conti

	Desenvolvimento
		Compilador: GCC versão 4.4.3 padrão ANSI
		Sistema Operacional: Ubuntu 10.04 - Lucid Lynx
		Desenvolvimento utilizando repositório SVN

	Descrição
		O programa recebe um arquivo binário contendo registros e constrói um índice utilizando uma árvore B. O registro tem os campos matrícula e nome. A 			matrícula é a chave primária utilizada no índice. Um segundo programa recebe do usuário uma chave e retorna o segundo campo do registro (nome).
*/

/* Bibliotecas */
#include <stdio.h>
#include <stdlib.h>
#include "arvoreB.h"

int main () {
	/* Declaração de variáveis da função main */
	FILE *arquivoBTree, *arquivoReg;
	char matricula[9], arquivo[31];
	char c;
	int prr;

	/* Entrada de matrícula */
	printf ("Informe a matricula de pesquisa: ");
	scanf ("%s", matricula);
	getchar ();

	/* Entrada do arquivo de registros */
	printf ("Informe o nome do arquivo de registros: ");
	scanf ("%s", arquivo);
	getchar ();

	/* Abertura e validação do arquivo binário */
	if ((arquivoReg = fopen (arquivo, "rb")) == NULL) {
		printf ("Erro! Arquivo inexistente ou nao foi possivel abri-lo\n");
		exit (1);
	}
	else {
		printf ("Arquivo aberto com sucesso!\n");
	}

	arquivoBTree = fopen("arvoreB.bin","rb");

	ptrArq arq = NULL, arq_reg = NULL;
	arq = arquivoBTree;
	arq_reg = arquivoReg;
	ptrPag pagina = NULL;
	pagina = malloc (sizeof (struct Pagina)); /* Alocação da página a ser carregada na memória */
	carregaPagina (&arq, &pagina);	/* Carrega página na memória */
	prr = procurarChave (&pagina, matricula);

	/* Se não foi encontrado, a função procurarChave retorna -1 */
	if (prr < 0) {
		printf ("%s nao foi encontrado!\n", matricula);
	}
	else {
		fseek (arquivoReg, prr, SEEK_SET);
		imprimeRegistros (&arq_reg);
	}
	fclose (arquivoBTree);
	fclose (arquivoReg);
}
